package ar.edu.unju.fi.uicomponents.beans;

import java.io.Serializable;
import javax.faces.context.FacesContext;

import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import org.apache.log4j.Logger;

import ar.edu.unju.fi.model.dao.RolDAO;
import ar.edu.unju.fi.model.dao.UsuarioDAO;
import ar.edu.unju.fi.model.dao.impl.RolDAOImpl;
import ar.edu.unju.fi.model.dao.impl.UsuarioDAOImpl;

import ar.edu.unju.fi.model.domain.Producto;
import ar.edu.unju.fi.model.domain.Rol;
import ar.edu.unju.fi.model.domain.Usuario;

@ManagedBean
@SessionScoped
public class UsuarioHomeBean extends BaseBean implements Serializable{
	
	/**
	 * @author Fernando
	 */
	private static final long serialVersionUID = 1L;
	
	private List<Usuario> list = new ArrayList<Usuario>();
	
	private String consulta;
	private Usuario usuario;
	
	private UsuarioDAO dao = getServicio().getUsuarioDAO();
	private RolDAO rolDao = getServicio().getRolDAO();
	private Rol rol1 ;
	Logger logger = Logger.getLogger(UsuarioHomeBean.class);
	
	public UsuarioHomeBean(){
		
	}
	/**
	 * 
	 * @return Devuelve una lista de todos los usuarios 
	 */
	public List<Usuario> load(){
		logger.info("Cargando lista de usuarios");
		list = dao.getAll();
		System.out.println(list);
		return list;
	}
	/**
	 * @return Este metodo inicia un usuario nuevo y direcciona a la pagina del alta
	 */
	public String preInsert(){
		logger.info("******* preInsert");
		consulta="false";
		//System.out.println("******** preInsert");
		setUsuario(new Usuario());
		rol1 = rolDao.getById(1);
		usuario.setRol(rol1);
		
		System.out.println(usuario.getRol() +"---"+ usuario.getDocumento());
		
		return "altaUsuario.xhtml?faces-redirect=true";
	}
	/**
	 * @return Cambia la variable de consulta para la modificacion del usuario 
	 * y devuelve a la pagina de alta de usuario
	 */
	public String  update(){
		consulta="true";
		logger.info("Update de usuario");
		System.out.println("******** preUpdate alta -: " + getUsuario().getRol() + " Nombre: "+ getUsuario().getNombre());
		System.out.println(getUsuario().getEstado());
//		if(getUsuario().getRol().getDescripcion().equals("VENDEDOR")){
//			rol1 = rolDao.getById(1);
//		}else{
//			rol1 = rolDao.getById(2);
//		}
//			
//		usuario.setRol(rol1);
	
		System.out.println(usuario.getRol());
		return "altaUsuario.xhtml?faces-redirect=true";
	}
	
	public String  delete(){
		
		return null;
	}
	/**
	 * 
	 * @return Realiza el guardado del usuario o la modificacion segun la variable consulta
	 */
	public String save(){
		
		logger.info("Save de usuario");
		if(consulta.equals("false")){
			
			System.out.println(usuario.getDocumento());
			dao.save(usuario);
		
		}else{
			System.out.println(getUsuario().getEstado()+"-"+"-"+getUsuario().getRol());
			dao.update(usuario);
		     }
		
		//System.out.println("........Guardando......");
		load();
		return "homeUsuario.xhtml";
	}
	
	public String out(){
		return "homeUsuario.xhtml";
		
	}
	
	
	
	
	
	
	/**
	 * @return the list
	 */
	public List<Usuario> getList() {
		return list;
	}

	/**
	 * @param list the list to set
	 */
	public void setList(List<Usuario> list) {
		this.list = list;
	}

	/**
	 * @return the consulta
	 */
	public String getConsulta() {
		return consulta;
	}
	/**
	 * @param consulta the consulta to set
	 */
	public void setConsulta(String consulta) {
		this.consulta = consulta;
	}
	/**
	 * @return the usuario
	 */
	public Usuario getUsuario() {
		return usuario;
	}
	/**
	 * @param usuario the usuario to set
	 */
	public void setUsuario(Usuario usuario) {
		
		this.usuario = usuario;
	}

	/**
	 * @return the dao
	 */
	public UsuarioDAO getDao() {
		return dao;
	}

	/**
	 * @param dao the dao to set
	 */
	public void setDao(UsuarioDAO dao) {
		this.dao = dao;
	}

	/**
	 * @return the rolDao
	 */
	public RolDAO getRolDao() {
		return rolDao;
	}

	/**
	 * @param rolDao the rolDao to set
	 */
	public void setRolDao(RolDAO rolDao) {
		this.rolDao = rolDao;
	}



	/**
	 * @return the rol1
	 */
	public Rol getRol1() {
		return rol1;
	}



	/**
	 * @param rol1 the rol1 to set
	 */
	public void setRol1(Rol rol1) {
		this.rol1 = rol1;
	}

	
}
